# 8、Python提供了几种方法来格式化字符串。这是非常有用的，特别是当你需要在字符串中插入变量值的时候。
# 旧式的格式化方法：你可以使用 % 运算符来格式化字符串，就像在C语言中那样。例如：
name = "Alice"
print("Hello,%s" % name)  # 输出：Hello,Alice
# str.format() 方法：这是一个更现代的方法，也是更推荐的方法。format() 方法是非常强大的，它支持各种复杂的字符串格式化。例如：
name = "Ashe"
print("Hello, {}!".format(name))  # 输出：Hello, Ashe!

# f-string：从Python 3.6开始，Python添加了一种新的字符串格式化方法，叫做f-string（格式化字符串字面量）。推荐使用这种方式 例如：
desc = '润'
print(f"{name} 超级超级 {desc}")  # 输出：Ashe 超级超级 润

# 不同的字符串格式化方法有不同的语法，你需要根据你使用的方法来正确地写出格式化字符串。
# 如果你的字符串中包含大括号 ({}) ，并且你正在使用 format() 方法或f-string，那么你需要使用两个连续的大括号 ({{}}) 来表示一个真正的大括号。
print(f"{name}{{}}")  # Ashe{}
# 当你在格式化字符串中插入用户提供的数据时，你需要格外小心，因为这可能导致安全问题。为了避免这个问题，你应该总是使用正确的字符串格式化方法，而不是简单地将用户提供的数据插入到字符串中。

# 9、原始字符串
# 在Python中，有时候我们需要表示一些包含特殊字符的字符串。比如文件路径（在Windows中包含反斜杠\）、正则表达式等。但在Python字符串中，反斜杠\有特殊的意义，它被用来引入转义序列，如\n代表换行，\t代表制表符等。
# 如果我们想要在字符串中直接包含一个反斜杠，我们需要写作\\。这会使得写路径或正则表达式变得非常麻烦。
# 为了解决这个问题，Python提供了原始字符串(raw string)的语法。只需要在字符串的引号前加一个`r`或`R`就可以了。在原始字符串中，所有的字符都是直接按照字面的意思来理解的，没有转义字符这样的概念。
# eg: 如果你想表示一个Windows文件路径：
s = r'C:\Program Files\Python'
print(s)  # 输出：C:\Program Files\Python
# 如果你不使用原始字符串，你需要使用双反斜杠来表示一个反斜杠：
s = 'C:\\Program Files\\Python'
print(s)  # 输出：C:\Program Files\Python
# 另一个常见的使用场景是正则表达式。因为正则表达式中经常会包含很多反斜杠，使用原始字符串可以避免不必要的混淆和错误。
# 然而需要注意的是，原始字符串的结尾不能是单独的一个反斜杠（也就是说，字符串不能以\结尾）。比如r"A\"是不合法的，因为字符串的结束引号被转义了。
# 如果你需要在原始字符串的末尾加反斜杠，你可以使用两个反斜杠，或者将反斜杠放入常规字符串中并使用字符串连接,或者在字符串的末尾添加一个空格。
s = r'C:\Program Files\Python' + '\\'
s2 = r'C:\Program Files\Python\ '
print(s)  # 输出：C:\Program Files\Python\
print(s2)  # 输出：C:\Program Files\Python\
# 这样的原因是Python解释器在解析原始字符串时，会认为最后的\是在试图转义结束的引号，从而引发语法错误。
